package com.tfswx.jcyw.sqlmodel.api.bean.jdpz;

import com.tfswx.jcyw.sqlmodel.api.function.FunctionUtil;
import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 表达式配置项
 *
 * @author 张述江
 * @date 2023/4/7
 */
@Data
public class BdspzItem {
    private String cslx;

    private String csz;

    private List<FfpzItem> ffList;

    @Override
    public String toString() {
        return toString(null);
    }

    private String ffTostring(List<FfpzItem> ffList) {
        Map<String, FfpzItem> ffMap = ffList.stream().collect(Collectors.toMap(FfpzItem::getFfbm, x -> x));
        FfpzItem ffpzItem = ffList.get(ffList.size() - 1);
        return ffpzItem.toString(ffMap);
    }

    public String toString(Map<String, FfpzItem> ffMap) {
        // 字段
        if ("字段".equals(cslx)) {
            if (ffMap != null) {
                return "'" + csz + "'";
            }
            return csz;
        }
        // 普通与数据源
        if ("普通".equals(cslx)) {
            if (ffMap != null) {
                return "'\\'" + csz + "\\''";
            }
            return "'" + csz + "'";
        }
        // 方法
        if ("方法".equals(cslx)) {
            Object execute = FunctionUtil.execute(ffTostring(ffList), null);
            return String.valueOf(execute);
        }
        // 方法结果
        if ("方法结果".equals(cslx)) {
            return ffMap.get(csz).toString(ffMap);
        }
        throw new RuntimeException("不支持的参数类型：" + cslx);
    }
}